package gdut.edu.demo02;

/**
 * @Description 循环链表
 * @Author JiaFu
 * @Date 2022/7/6 17:00
 */
public class MyLoopNode {
    //    数据
    private int data;
    //    下一个节点
    private MyLoopNode next = this;

    public MyLoopNode(int data) {
        this.data = data;
    }


//    删除下一个节点
    public void removeNext() throws RuntimeException{
//        判断是否还有下一个节点
        if (this.next == null || this.next == this) {
            throw new RuntimeException("循环链表只有当前节点一个元素，不可以删除");
        }
//        取到当前节点的下下个节点
        MyLoopNode newNext = this.next.next;
//        让当前节点的next指向下下个节点，就把当前节点的下一个节点删除了
        this.next = newNext;
    }
    //    获取节点的数据
    public int getData() {
        return this.data;
    }

//    插入一个节点作为当前节点的下一个节点
    public void insert(MyLoopNode myNode){
//        取出当前节点的下一个节点,作为下下个节点
        MyLoopNode nextNext = this.next;
//        把下下个节点设置为新节点myNode的下一个节点
        myNode.next = nextNext;
//        把新节点myNode设置为当前节点的下一个节点
        this.next = myNode;
//        写法2
/*        myNode.next = this.next;
        this.next = myNode;*/
    }

    //    获取下一个节点
    public MyLoopNode next() {
        return this.next;
    }

}
